<?php
declare (strict_types = 1);

namespace app\service;

// 导航栏model类
use app\model\Menu as MenuModel;

class Menu extends \think\Service
{
    public function __construct()
    {
        $this->model = new MenuModel();
    }
    /**
     * 获取接口组
     *
     * @return mixed
     */
    public function getMenuList()
    {
        $data = $this->model->select()->toArray();
        $list = [];
        foreach ($data as $value) {
            if ($value['class_type'] === 0) {
                // 一级目录
                $in_menu = false;
                $value['label'] = $value['permission_name'];
                foreach($list as $menu_k => $menu_v){
                    if ($menu_v['id'] === $value['id']) {
                        // 当前id的数据已存在
                        $in_menu = true;
                        // 将数据覆盖
                        $list[$menu_k] = $value;
                    }
                }
                // 未发现当前id的数据将数据push进去
                if(!$in_menu) array_push($list,$value);
            }
            else if ($value['class_type'] === 1) {
                // 二级控制
                $in_control = false;
                $value['label'] = $value['permission_name'];
                foreach($list as $menu_k => $menu_v){
                    if ($menu_v['id'] === $value['level_id']) {
                        // 当前父ID的数据存在
                        $in_control = true;
                        // 在父ID的指定字段下保存数据
                        if(empty($list[$menu_k]['children']))
                        {
                            $list[$menu_k]['children'] = [];
                        }
                        array_push($list[$menu_k]['children'],$value);
                    }
                }
                // 未发现当前父ID的数据将数据push进去
                if(!$in_control) array_push($list,['id'=>$value['level_id'],'children'=>array($value)]);
            }else{
                // 三级操作
                $value['label'] = $value['permission_name'];
                foreach($list as $menu_k => $menu_v){
                    foreach($menu_v['children'] as $control_k => $control_v){
                        if($control_v['id'] ===  $value['level_id']){
                            // 父ID存在于二级控制
                            if(empty($list[$menu_k]['children'][$control_k]['children']))
                            {
                                // 如果这个二级控制是空需要声明为数组
                                $list[$menu_k]['children'][$control_k]['children'] = [];
                            }
                            array_push($list[$menu_k]['children'][$control_k]['children'],$value);
                        }
                    }
                }
            }
        }
        return $list;
    }
    
    // /**
    //  * 注册服务
    //  *
    //  * @return mixed
    //  */
    // public function register()
    // {
    // 	//
    // }

    // /**
    //  * 执行服务
    //  *
    //  * @return mixed
    //  */
    // public function boot()
    // {
    //     //
    // }
}
